package com.tencent.wxpay.protocol.request;

import com.tencent.wxpay.common.Signature;

import java.io.Serializable;

/**
 * 查询退款接口请求数据对象
 */
public class RefundQueryReqData extends BaseReqData implements Serializable {
    private static final long serialVersionUID = 9212204634780390623L;
    /**
     * 设备号
     * 必填：否
     * 描述：商户自定义的终端设备号，如门店编号、设备的ID等
     */
    private String device_info;
    /**
     * 微信订单号
     * 必填：与 out_trade_no, out_refund_no, refund_id 四选一
     * 描述：微信订单号
     */
    private String transaction_id;
    /**
     * 商户订单号
     * 必填：与 transaction_id, out_refund_no, refund_id 四选一
     * 描述：商户系统内部的订单号
     */
    private String out_trade_no;
    /**
     * 商户退款单号
     * 必填：与 transaction_id, out_trade_no,  refund_id 四选一
     * 描述：商户侧传给微信的退款单号
     */
    private String out_refund_no;
    /**
     * 微信退款单号
     * 必填：与 transaction_id, out_trade_no, out_refund_no 四选一
     * 描述：微信生成的退款单号，在申请退款接口有返回
     */
    private String refund_id;

    /**
     * 请求查询退款接口构造方法 四个参数必填一个
     *
     * @param transactionID 微信订单号，微信系统为每一笔支付交易分配的订单号，通过这个订单号可以标识这笔交易，它由支付订单API支付成功时返回的数据里面获取到。建议优先使用
     * @param outTradeNo    商户系统内部的订单号
     * @param outRefundNo   商户系统内部的退款单号，商户系统内部唯一，同一退款单号多次请求只退一笔
     * @param refundID      微信生成的退款单号
     */
    public RefundQueryReqData(String transactionID, String outTradeNo, String outRefundNo, String refundID) {
        super();
        this.transaction_id = transactionID;
        this.out_trade_no = outTradeNo;
        this.out_refund_no = outRefundNo;
        this.refund_id = refundID;
        setSign(Signature.getSign(toMap(this)));
    }

    /**
     * 请求查询退款接口构造方法 refund_id、out_refund_no、out_trade_no 、transaction_id 四个参数必填一个
     *
     * @param deviceInfo    微信支付分配的终端设备号，与下单一致
     * @param transactionID 微信订单号，微信系统为每一笔支付交易分配的订单号，通过这个订单号可以标识这笔交易，它由支付订单API支付成功时返回的数据里面获取到。建议优先使用
     * @param outTradeNo    商户系统内部的订单号
     * @param outRefundNo   商户系统内部的退款单号，商户系统内部唯一，同一退款单号多次请求只退一笔
     * @param refundID      微信生成的退款单号
     */
    public RefundQueryReqData(String deviceInfo, String transactionID, String outTradeNo, String outRefundNo, String refundID) {
        super();
        this.device_info = deviceInfo;
        this.transaction_id = transactionID;
        this.out_trade_no = outTradeNo;
        this.out_refund_no = outRefundNo;
        this.refund_id = refundID;
        setSign(Signature.getSign(toMap(this)));
    }

    public String getDevice_info() {
        return device_info;
    }

    public void setDevice_info(String device_info) {
        this.device_info = device_info;
    }

    public String getTransaction_id() {
        return transaction_id;
    }

    public void setTransaction_id(String transaction_id) {
        this.transaction_id = transaction_id;
    }

    public String getOut_trade_no() {
        return out_trade_no;
    }

    public void setOut_trade_no(String out_trade_no) {
        this.out_trade_no = out_trade_no;
    }

    public String getOut_refund_no() {
        return out_refund_no;
    }

    public void setOut_refund_no(String out_refund_no) {
        this.out_refund_no = out_refund_no;
    }

    public String getRefund_id() {
        return refund_id;
    }

    public void setRefund_id(String refund_id) {
        this.refund_id = refund_id;
    }
}
